// @Description 用户数据模型
// @Author  xiaoyang
// @Date  2025/06/18

package dao

import (
	"time"
)

// SysUser 用户表
// @Description 系统用户表，存储用户基本信息
type SysUser struct {
	ID          uint       `json:"id" gorm:"primarykey"`                                              // 主键ID
	Username    string     `json:"username" gorm:"type:varchar(50);uniqueIndex;not null;comment:用户名"` // 用户名
	Password    string     `json:"-" gorm:"type:varchar(255);not null;comment:密码"`                    // 密码，不在JSON中显示
	Nickname    string     `json:"nickname" gorm:"type:varchar(50);comment:昵称"`                       // 昵称
	Email       string     `json:"email" gorm:"type:varchar(100);uniqueIndex;comment:邮箱"`             // 邮箱
	Phone       string     `json:"phone" gorm:"type:varchar(20);comment:手机号"`                         // 手机号
	Avatar      string     `json:"avatar" gorm:"type:varchar(255);comment:头像地址"`                      // 头像地址
	Status      int        `json:"status" gorm:"type:tinyint;default:1;comment:状态：1启用 0禁用"`           // 状态：1启用 0禁用
	LastLoginAt *time.Time `json:"last_login_at" gorm:"comment:最后登录时间"`                               // 最后登录时间
	LastLoginIp string     `json:"last_login_ip" gorm:"type:varchar(50);comment:最后登录IP"`              // 最后登录IP
	CreatedAt   time.Time  `json:"created_at" gorm:"comment:创建时间"`                                    // 创建时间
	UpdatedAt   time.Time  `json:"updated_at" gorm:"comment:更新时间"`                                    // 更新时间
}

// TableName 指定表名
func (SysUser) TableName() string {
	return "sys_users"
}

// SysRole 角色表
// @Description 系统角色表，存储角色信息
type SysRole struct {
	ID          uint      `json:"id" gorm:"primarykey"`                                                // 主键ID
	RoleName    string    `json:"role_name" gorm:"type:varchar(50);uniqueIndex;not null;comment:角色名称"` // 角色名称
	RoleCode    string    `json:"role_code" gorm:"type:varchar(50);uniqueIndex;not null;comment:角色编码"` // 角色编码
	Description string    `json:"description" gorm:"type:varchar(255);comment:角色描述"`                   // 角色描述
	Status      int       `json:"status" gorm:"type:tinyint;default:1;comment:状态：1启用 0禁用"`             // 状态：1启用 0禁用
	CreatedAt   time.Time `json:"created_at" gorm:"comment:创建时间"`                                      // 创建时间
	UpdatedAt   time.Time `json:"updated_at" gorm:"comment:更新时间"`                                      // 更新时间
}

// TableName 指定表名
func (SysRole) TableName() string {
	return "sys_roles"
}

// SysPermission 权限表
// @Description 系统权限表，存储权限信息
type SysPermission struct {
	ID             uint      `json:"id" gorm:"primarykey"`                                                       // 主键ID
	PermissionName string    `json:"permission_name" gorm:"type:varchar(100);not null;comment:权限名称"`             // 权限名称
	PermissionCode string    `json:"permission_code" gorm:"type:varchar(100);uniqueIndex;not null;comment:权限编码"` // 权限编码
	Description    string    `json:"description" gorm:"type:varchar(255);comment:权限描述"`                          // 权限描述
	Type           int       `json:"type" gorm:"type:tinyint;default:1;comment:权限类型：1菜单 2按钮 3接口"`                // 权限类型：1菜单 2按钮 3接口
	ParentID       uint      `json:"parent_id" gorm:"default:0;comment:父级权限ID"`                                  // 父级权限ID
	Path           string    `json:"path" gorm:"type:varchar(255);comment:路由路径"`                                 // 路由路径
	Icon           string    `json:"icon" gorm:"type:varchar(100);comment:图标"`                                   // 图标
	Sort           int       `json:"sort" gorm:"default:0;comment:排序"`                                           // 排序
	Status         int       `json:"status" gorm:"type:tinyint;default:1;comment:状态：1启用 0禁用"`                    // 状态：1启用 0禁用
	CreatedAt      time.Time `json:"created_at" gorm:"comment:创建时间"`                                             // 创建时间
	UpdatedAt      time.Time `json:"updated_at" gorm:"comment:更新时间"`                                             // 更新时间
}

// TableName 指定表名
func (SysPermission) TableName() string {
	return "sys_permissions"
}

// UserRole 用户角色关联表
// @Description 用户角色关联表
type UserRole struct {
	ID     uint `json:"id" gorm:"primarykey"`                 // 主键ID
	UserID uint `json:"user_id" gorm:"not null;comment:用户ID"` // 用户ID
	RoleID uint `json:"role_id" gorm:"not null;comment:角色ID"` // 角色ID
}

// TableName 指定表名
func (UserRole) TableName() string {
	return "sys_user_roles"
}

// RolePermission 角色权限关联表
// @Description 角色权限关联表
type RolePermission struct {
	ID           uint `json:"id" gorm:"primarykey"`                       // 主键ID
	RoleID       uint `json:"role_id" gorm:"not null;comment:角色ID"`       // 角色ID
	PermissionID uint `json:"permission_id" gorm:"not null;comment:权限ID"` // 权限ID
}

// TableName 指定表名
func (RolePermission) TableName() string {
	return "sys_role_permissions"
}
